package org.test.javaCharacteristic.innerclass;

import org.junit.Test;


public class OuterClass {
	
	private String outerClassmember="父非静态成员";
	
	private static String outerClassStatic="父静态成员";

	/**
	 * 访问内部非静态类里面的静态方法
	 */
	public static void testOuterClassMethod(){
	//System.out.println(outerClassmember);//静态方法不能直接用非静态成员
	}
	
	
	

	/**
	 * 这个内部类,要静态就全部都静态,即static class时,其方法才能static...
	 * 
	 * 这里和外部类是不一样的.
	 * 
	 * 
	 * 外部类不能直接访问内部类,内部类可以直接访问外部类的成员(包括私有)
	 * @author game
	 *
	 */
	public  class Inter1class{
		
		/**
		 * private也是能被直接外部类访问到的.
		 */
		private String is="he";
		
		/**
		 * 这个内部类,成员变量却是可以static,但一定要是final...为啥???
		 */
		private  static final String is2="k";
		
		public   void  testinterclasspublic(){
			System.out.println("Inter1class直接访问OuterClass的私有成员变量 :"+outerClassmember);//能访问到外部类的变量 
			System.out.println("Inter1class直接访问OuterClass的静态私有成员变量 :"+outerClassStatic);//能访问到外部类的变量
		}
		
		
		
	}
	
	/**
	 * 虚拟内部类.若把class前面的abstract除去,不行.要abstract方法,就一定要为abstract类.
	 * 这个貌似和外部类好像都一样,没 啥区别
	 * @author game
	 *
	 */
	 abstract class Inter2class{
		
		public void testabstractmethod(){
			System.out.println("这是public方法");
		}
		
		public abstract void testabstractmethod2();
	}
	
	
	@Test
	public void  test(){
		Inter1class i1 = new OuterClass.Inter1class();
		i1.testinterclasspublic();
		
	}
}
